import Vue from "vue"
import VueRouter from "vue-router"
Vue.use(VueRouter)
//原型上修改push方法，因为push在第二点击后发现地址没会报错弹出警告
const originPush = VueRouter.prototype.push //先将之前的push方法储存到一个变量中 push在历史记录中追加

const originRepace = VueRouter.prototype.replace //路由替换当前历史记录

//修改VueRouter原型上的push方法 ，用于解决重复跳转时报错的问题

VueRouter.prototype.push = function (location, okCallBack, errCallBack) {
  if (okCallBack === undefined && errCallBack === undefined) {
    //上面的判断成立的话就表示没有传递这两个参数
    // 通过 call()，您能够使用属于另一个对象的方法。
    //location身上添加了个推出报错的方法，这就相当于给原型身上添加了个新的方法，这个方法的作用是当okCallBack和errCallBack没有传值的时候，就是说路径地址没有改变的时候，本来会报错，但是通过修改路由原型上的方法只要没有改变就不会报错了，会通过location身上的方法推出错误,否则的话就给push身上添加location,okCallBack,errCallBack ，这就表示okCallBack,errCallBack有值，路径改变了就不会报错，
    originPush.call(this, location).catch(() => { })
  } else {
    originPush.call(this, location, okCallBack, errCallBack)
  }
}

// 修改VueRouter原型上的replace 用于解决重复跳转时报错的问题
VueRouter.prototype.replace = function (location, okCallBack, errCallBack) {
  if (okCallBack === undefined && errCallBack === undefined) {
    //上面的判断成立的话就表示没有传递这两个参数
    // 通过 call()，您能够使用属于另一个对象的方法。
    //location身上添加了个推出报错的方法，这就相当于给原型身上添加了个新的方法，这个方法的作用是当okCallBack和errCallBack没有传值的时候，就是说路径地址没有改变的时候，本来会报错，但是通过修改路由原型上的方法只要没有改变就不会报错了，会通过location身上的方法推出错误,否则的话就给replace身上添加location,okCallBack,errCallBack ，这就表示okCallBack,errCallBack有值，路径改变了就不会报错，
    originRepace.call(this, location).catch(() => { })
  } else {
    originRepace.call(this, location, okCallBack, errCallBack)
  }
}



//引入路由
import Home from '@/views/Home'
import Login from '@/views/Login'
import Register from '@/views/Register'
import Seach from '@/views/Seach'

const routes = [
  { path: '/', redirect: '/home' },
  // Home页面
  {
    path: '/home', component: Home,

    // children: [
    //   {
    //     path: 'typeNav', component: TypeNav,
    //   }
    // ]
  },

  {
    path: '/login', component: Login,
    // 用来控制当前组件头尾显示不
    meta: {
      isHiddenFooter: true
    }
  },
  {
    path: '/register', component: Register,
    meta: {
      isHiddenFooter: true
    }
  },

  {
    // 哈希模式编程式导航要写站符
    path: '/seach/:keyword?',
    name: 'search',
    component: Seach,
    meta: {
      isHiddenNav: true // 是否显示左侧导航 
    }

  },
]

const router = new VueRouter({
  routes
})
export default router